import {
	createStore
} from 'vuex';
import {
	login,
	getinfo
} from '~/api/manager';
import {
	setToken,
	removeToken
} from '~/composables/auth';

const store = createStore({
	state() {
		return {
			// 用户信息
			user: {},
			// 侧边宽度
			asideWidth: "250px",
			menus: [],
			ruleNames: []
		};
	},
	mutations: {
		// 记录用户信息
		SET_USERINFO(state, user) {
			state.user = user;
		},
		// 展开
		handleAsideWidth(state) {
			state.asideWidth = state.asideWidth === "250px" ? "64px" : "250px";
		},
		SET_MENUS(state, menus) {
			state.menus = menus;
		},
		SET_RULENAMES(state, ruleNames) {
			state.ruleNames = ruleNames;
		}
	},
	actions: {
		// 登录
		login({
			commit
		}, {
			username,
			password
		}) {
			return new Promise((resolve, reject) => {
				login(username, password)
					.then(res => {
						setToken(res.token);
						resolve(res);
					})
					.catch(err => {
						// 可以在这里添加更详细的错误处理逻辑，例如记录错误日志等
						reject(err);
					});
			});
		},
		// 获取当前登录用户信息
		getinfo({
			commit
		}) {
			return new Promise((resolve, reject) => {
				getinfo()
					.then(res => {
						commit("SET_USERINFO", res);
						commit("SET_MENUS", res.menus);
						commit("SET_RULENAMES", res.ruleNames);
						resolve(res);
					})
					.catch(err => {
						// 可以在这里添加更详细的错误处理逻辑，例如记录错误日志等
						reject(err);
					});
			});
		},
		// 退出登录
		logout({
			commit
		}) {
			// 移除 cookie 里的 token
			removeToken();
			// 清除当前用户状态 vuex
			commit("SET_USERINFO", {}); // 传递空对象以重置用户信息
			commit("SET_MENUS", []); // 重置 menus
			commit("SET_RULENAMES", []); // 重置 ruleNames
		}
	}
});

export default store;